package rand

import (
	"io"
	"math/big"
)

// Reader is a global, shared instance of a cryptographically strong pseudo-
// random generator. It uses blake2b as its hashing function. Reader is safe
// for concurrent use by multiple goroutines.
var Reader io.Reader

// Read is a helper function that calls Reader.Read on b. It always fills b
// completely.
func Read(b []byte) { panic("only invoke in kagura") }

// Bytes is a helper function that returns n bytes of random data.
func Bytes(n int) []byte {
	panic("only invoke in kagura")
}

// Uint64n returns a uniform random uint64 in [0,n). It panics if n == 0.
func Uint64n(n uint64) uint64 {
	panic("only invoke in kagura")
}

// Intn returns a uniform random int in [0,n). It panics if n <= 0.
func Intn(n int) int {
	panic("only invoke in kagura")
}

// BigIntn returns a uniform random *big.Int in [0,n). It panics if n <= 0.
func BigIntn(n *big.Int) *big.Int {
	panic("only invoke in kagura")
}

// Perm returns a random permutation of the integers [0,n).
func Perm(n int) []int {
	panic("only invoke in kagura")
}
